home *** CD-ROM | disk | FTP | other *** search
/ PC Media 22 / PC MEDIA CD22.iso / share / prog / spm220e / convertc.c < prev    next >
Text File  |  1995-10-09  |  4KB  |  113 lines

  1. /*
  2. ╔═════════════════════════════════════════════════════════════════════════════╗
  3. ║ NAME      : CONVERTC.C: CONVASC and CONVHEX routines.                       ║
  4. ║ VERSION   : v 1.0                                                           ║
  5. ║ FILE TYPE : Use TC.EXE to make the executable file...                       ║
  6. ║ FUNCTION  : Shows how to use the ASCII <--> HEXA transcoding routines       ║
  7. ║           : from the C language.                                            ║
  8. ║           : Their main goal is to permit to a SERIAL PORTS MANAGER applic.  ║
  9. ║           : using the Xon/Xoff protocol to transmit binary informations     ║
  10. ║           : without any interferences with the soft hand-shaking...         ║
  11. ║           : ATTENTION: Each binary code is associated to 2 ASCII codes.     ║
  12. ║           : Therefore, the efficiency of an ASCII transmission is less      ║
  13. ║           : than for a binary transmission ! ONLY USE THESE PROCEDURES      ║
  14. ║           : IF YOU CAN NOT DO OTHERWISE...                                  ║
  15. ║ SYNTAX    : CONVERTC                                                        ║
  16. ║ COPYRIGHT : HETRU Fabrice 1991.                                             ║
  17. ╚═════════════════════════════════════════════════════════════════════════════╝
  18. */
  19.  
  20.  
  21. #include "stdio.h" /* input/output  */
  22. #include "dos.h"   /* using regs... */
  23.  
  24. union    REGS inregs,outregs;
  25. struct   SREGS segregs;
  26.  
  27.  
  28.  
  29. void ConvAscii(unsigned char *pte, unsigned char *pts)
  30. /* Converts 2 ASCII codes from *pte into *pts and *pts++...                */
  31.   {
  32.   unsigned char car,val;
  33.  
  34.   /* Stroring the hexa. number. */
  35.   val = *pte;
  36.   /* Converting the left half-byte */
  37.   car = (val >> 4) + '0';
  38.   *pts++ = car;
  39.   /* Converting the right half-byte */
  40.   car = (val & 0x0F) + '0';
  41.   /* Returning the result */
  42.   *pts = car;
  43.   }
  44.  
  45.  
  46. void ConvHexa(unsigned char *pte, unsigned char *pts)
  47. /* Converts, into 1 HEXA, the 2 ASCII codes from *pte and *pte++ into *pts */
  48.   {
  49.   unsigned char car;
  50.  
  51.   /* Converting the left half-byte */
  52.   car = (*pte++ - '0') << 4;
  53.   /* Converting the right half-byte */
  54.   car = car + (*pte - '0');
  55.   /* Returning the result */
  56.   *pts = car;
  57.   }
  58.  
  59.  
  60. int get_clav()
  61.   {
  62.   int l;
  63.  
  64.   inregs.h.ah = 0;
  65.   int86(0x16,&inregs,&outregs);
  66.   l = outregs.h.al;
  67.   if (l==3) l = 67;
  68.   return(l);
  69.   }
  70.  
  71.  
  72. main ()
  73.   {
  74.   char fin;
  75.   char caract;
  76.   unsigned int dest;
  77.   unsigned char *pt;
  78.  
  79.   fin = 0;
  80.   printf("CONVERTC: A demostration of the HEXA <--> ASCII trancoding.\n");
  81.   printf("            (Press 'Esc' to end this program).\n");
  82.   while(!fin)
  83.     {
  84.     /* Get the byte to transcode */
  85.     printf("\nCharacter: ");
  86.     caract = get_clav();
  87.     if (caract!=0x0d)
  88.       printf("%c/%x",caract,caract);
  89.     else printf("  /%x",caract);
  90.     if (caract==0x1b) fin = 1;
  91.  
  92.     /* HEXA-->ASCII transcoding */
  93.     ConvAscii(&(char)caract,&(char)dest);
  94.     /* Result into screen. */
  95.     pt = &(char)dest + 1;
  96.     printf(" --ConvAscii--> %c%c",(char)*pt,(char)dest);
  97.  
  98.     /* IN THAT POINT, THE ASCII BYTES MAY BE TRANSMITED WITHOUT ANY RISK
  99.        TO INTERFER WITH THE Xon/Xoff HAND-SHAKING
  100.        (whose codes are included between 0 and 29h...).
  101.        INCONVENIENT from this method: For each byte to send, 2 bytes have
  102.        to be transmited !... */
  103.  
  104.     /* ASCII-->HEXA transcoding */
  105.     ConvHexa(&(char)dest,&(char)caract);
  106.     /* Write the restitued byte into screen (=Primary code if O.K.) */
  107.     if (caract!=0x0d)
  108.       printf(" --ConvHexa--> %c/%x",caract,caract);
  109.     else printf(" --ConvHexa-->   /%x",caract);
  110.     }
  111.   printf("\nCONVERTC has ended --- (C)HETRU Fabrice.\n");
  112.   }
  113.